Зачем
Если ты думаешь, что
Пример:
А теперь магия с методами:
📌 Даже если функция возвращает
⚠️ Но аккуратно:
Если хочешь писать более надёжный и самодокументируемый код — юзай
➡️ @cpp_geek
[[nodiscard]]
нужен не только для возврата значенияЕсли ты думаешь, что
[[nodiscard]]
— это просто защита от игнора Result
, то вот фокус: его можно вешать и на классы, и на функции, и даже на enum — и это реально помогает избежать багов.Пример:
struct [[nodiscard]] Error {
std::string message;
};
Error do_something() {
return {"Что-то пошло не так"};
}
void foo() {
do_something(); // warning: ignoring return value of nodiscard type
}
А теперь магия с методами:
struct Connection {
[[nodiscard]] bool is_valid() const {
return valid_;
}
private:
bool valid_ = false;
};
void check_connection(const Connection& conn) {
conn.is_valid(); // warning: result of 'is_valid' is unused
}
📌 Даже если функция возвращает
bool
— компилятор предупредит, если ты его проигнорируешь. Это круто, когда метод что-то проверяет, ищет или сигналит об ошибке — и ты точно не хочешь забыть проверить результат.⚠️ Но аккуратно:
[[nodiscard]]
не бросает исключения и не делает функцию безопасной. Это подсказка компилятору и твой напарник по коду.Если хочешь писать более надёжный и самодокументируемый код — юзай
[[nodiscard]]
не только по дефолту, а осознанно.➡️ @cpp_geek